home *** CD-ROM | disk | FTP | other *** search
/ Transactor / Transactor_07_1985_Transactor_Publishing.d64 / vector manager (.txt) < prev    next >
Commodore BASIC  |  2023-02-26  |  3KB  |  146 lines

  1. 0 rem the transactor volume 6 issue 02        page 63
  2. 100 sys700 ;pal 64 asm
  3. 110 .opt oo
  4. 120 *=50000
  5. 130 ;vector link example
  6. 131 ;vector management system
  7. 132 ;sys 50000,50003,50006 or 50009
  8. 133 ;to activate or deactivate routines
  9. 134 ;(examples are irq-driven)
  10. 135 ;** see article for details **
  11. 140 irqvec =$0314
  12. 150 jmp connect ;connect rtn1
  13. 160 jmp p1dis   ;disconnect rtn2
  14. 170 jmp p2con   ;connect rtn2
  15. 180 jmp p2dis   ;disconnect rtn2
  16. 190 ;
  17. 200 conflag .byt 0
  18. 210 con2flg .byt 0
  19. 220 ;
  20. 230 p1dis =*
  21. 240 jsr addcheck ;vector point to rtn"?
  22. 250 bne derr     ;no, can't disc[145]nect
  23. 260 lda c[145]flag  ;see [139] al[135]y set[171]up
  24. 270 beq p1e      ;al[135]y disc[145]nected
  25. 280 sei          ;ok, set [164] prev state
  26. 290 lda #0
  27. 300 sta c[145]flag  ;clear c[145]nect flag
  28. 310 lda oldirq
  29. 320 sta irqvec
  30. 330 lda oldirq[170]1
  31. 340 sta irqvec[170]1
  32. 350 cli
  33. 360 p1e rts
  34. 370 ;
  35. 380 c[145]nect [178][172]
  36. 390 lda c[145]flag  ;al[135]y c[145]nected"?
  37. 400 bne cerr     ;yes, error
  38. 410 lda #255
  39. 420 sta conflag  ;set connect flag
  40. 430 lda irqvec   ;save old vector
  41. 440 sta oldirq
  42. 450 lda irqvec+1
  43. 460 sta oldirq+1
  44. 470 sei          ;now connect new rtn
  45. 480 lda #<displin
  46. 490 sta irqvec
  47. 500 lda #>displin
  48. 510 sta irqvec+1
  49. 520 cli
  50. 530 rts
  51. 540 ;
  52. 550 oldirq .wor *-*
  53. 560 ;
  54. 570 derr =*
  55. 580 lda #<dmsg: ldy #>dmsg
  56. 590 jsr $ab1e ;prt string
  57. 600 rts
  58. 610 dmsg .asc "** can't disconnect **"
  59. 620 .byte 0
  60. 630 ;
  61. 640 cerr =*
  62. 650 lda #<cmsg: ldy #>cmsg
  63. 660 jsr $ab1e ;prt string
  64. 670 rts
  65. 680 cmsg .asc "** can't connect: already connected"
  66. 690 .byte 13,0
  67. 700 ;
  68. 710 addcheck =*
  69. 720 ;set z if irvec<>displin
  70. 730 lda irqvec
  71. 740 cmp #<displin
  72. 750 bne cout
  73. 760 lda irqvec+1
  74. 770 cmp #>displin
  75. 780 cout rts
  76. 790 ;
  77. 800 ;
  78. 810 displin =*
  79. 820 ldx #39
  80. 830 d1 =*
  81. 840 lda msg,x
  82. 850 sta $0400,x
  83. 860 lda #1
  84. 870 sta $d800,x
  85. 880 dex
  86. 890 bpl d1
  87. 900 jmp (oldirq)
  88. 910 ;
  89. 920 msg .asc "*** zamsoft operating system v 1.0 ***  "
  90. 930 ;
  91. 940 p2dis =*
  92. 950 jsr p2chk  ;points to rtn2"?
  93. 960 beq [172][170]5:jmp derr;no, can't disc[145]nect
  94. 970 lda c[145]2flg
  95. 980 beq p2e       ;al[135]y disc[145]nected
  96. 990 lda #0
  97. 1000 sta c[145]2flg  ;clear c[145]nect flag
  98. 1010 sei
  99. 1020 lda oldirq2
  100. 1030 sta irqvec
  101. 1040 lda oldirq2[170]1
  102. 1050 sta irqvec[170]1
  103. 1060 cli
  104. 1070 p2e rts
  105. 1080 ;
  106. 1090 p2c[145] [178][172]
  107. 1100 lda c[145]2flg
  108. 1110 beq [172][170]5:jmp cerr
  109. 1120 lda #255
  110. 1130 sta c[145]2flg   ;set c[145]nect flag
  111. 1140 lda irqvec
  112. 1150 sta oldirq2
  113. 1160 lda irqvec[170]1
  114. 1170 sta oldirq2[170]1
  115. 1180 sei
  116. 1190 lda #[179]prog2
  117. 1200 sta irqvec
  118. 1210 lda #[177]prog2
  119. 1220 sta irqvec[170]1
  120. 1230 cli
  121. 1240 rts
  122. 1250 ;
  123. 1260 oldirq2 .w[176] [172][171][172]
  124. 1270 ;
  125. 1280 p2chk [178][172]
  126. 1290 lda irqvec
  127. 1300 cmp #[179]prog2
  128. 1310 bne pout
  129. 1320 lda irqvec[170]1
  130. 1330 cmp #[177]prog2
  131. 1340 pout [178][172]
  132. 1350 rts
  133. 1360 ;
  134. 1370 prog2 [178][172]
  135. 1380 lda 197
  136. 1390 cmp lkey
  137. 1400 beq p2out
  138. 1410 cmp #6
  139. 1420 bne p2out
  140. 1430 inc $d020
  141. 1440 p2out [178][172]
  142. 1450 lda 197: sta lkey
  143. 1460 jmp (oldirq2)
  144. 1470 ;
  145. 1480 lkey .byt [172][171][172]
  146.